1. The Field of the Invention
The present invention relates to software development technology. More specifically, the present invention relates to mechanisms in which an asynchronous operations manager provides a standardized interface to an asynchronous component such that the asynchronous component interfaces in the same way with the asynchronous operations manager regardless of the specific application framework used to build the application into which the asynchronous component is incorporated.
2. Background and Related Art
Computing technology has transformed the way we work and play. Computing technology relies on sophisticated hardware including interconnected processing, memory, communication and user interface devices. Software governs how these various physical components interact with each other and with a user in order to enable a substantially unlimited variety of applications.
Software is created by human programmers most often using source code. Source code includes language and symbols that are relatively intuitive to a human programmer. However, source code is not directly interpretable by a processor. Accordingly, in order to obtain functioning software, the source code is interpreted or compiled into binary instructions and data that may directly instruct the processor on what specific actions are to be performed in order to enable the functionality of the software.
Software is becoming more and more complex as time progresses. It is not at all unusual for an application to contain many thousands, and even millions of distinct binary instructions. This rapid advancement in software development is enabled largely by the fact that once a component is built that performs a particular lower level task, that component may be incorporated into many different applications that are to perform that lower level task, even if the higher level functionality of the applications are quite different. A component is a discrete set of computer-executable instructions that, when executed, implement one or more functions. The component may be called by other software components or applications. Object oriented programming enables this. Accordingly, an application programmer has access to often a wide variety of components that it may incorporate into the application by placing a function call that properly interfaces with the component. Applications may incorporate many different components.
An application may be built using one of many widely-used application frameworks. Examples of application frameworks includes the WINDOWS Forms client-side User Interface (UI) programming framework, the ASP.NET server-side UI programming and HTTP framework, free threaded console applications, applications embedded into SQL Server and others. Conventionally, in order for a component to be available to applications that may have been written using one of multiple application frameworks, the component would typically either be specifically designed and written to work in applications following any of the multiple frameworks, or there would have to be a component corresponding to each one of the frameworks.
It is important that components take into consideration the specific application framework when performing asynchronous operations. An asynchronous operation is an operation that advances towards completion on another thread of execution or on some piece of hardware while other processes are ongoing. When the asynchronous operation is complete, an event notification occurs to execute code written in the context of and accordingly to the rules of the targeted application framework. However, the context and thread upon which the notification is returned depends heavily on the application framework used to build the application that incorporates the component. The component would thus be built in such a way that it is prepared to receive the notification when issued (and then send a corresponding notification to the application) in accordance with the particular threading and concurrency model used by the corresponding application framework. Otherwise, the asynchronous operation may fail.
Accordingly, for an asynchronous operation to work across multiple frameworks, a separate component is built for one of the application frameworks, a separate component is built for another of the application frameworks, and so forth for all of the application frameworks. Alternatively, the component may be built to work with any one of multiple application frameworks. However, in either case, the author of the component(s) would need to consider the threading and concurrency model of each of the application frameworks and address the threading and concurrency model issues through explicitly drafted source code.
Accordingly, what would be advantageous is a mechanism that allows a component to operate under a wide-variety of application frameworks without the author of the component having to consider application framework specific issues such as the threading and concurrency model. It would further be advantageous if the application was not curtailed in its use of components since certain components only work with certain application frameworks.